import pandas as pd
import requests
from pydub import AudioSegment
import oss2
from io import BytesIO

# 读取Excel文件
input_excel = '每周会话记录导入.xlsx'
df = pd.read_excel(input_excel)

# 按会话ID整合学员话术，并保留唯一的用户说话地址
grouped = df.groupby('会话id')['学员话术'].apply(' '.join).reset_index()
grouped = pd.merge(grouped, df[['会话id', '用户说话地址']].drop_duplicates(), on='会话id')


# 下载音频文件函数
def download_audio(url):
    response = requests.get(url)
    audio = AudioSegment.from_file(BytesIO(response.content))
    return audio


# 上传音频文件函数
# 上传文件到阿里云OSS
def upload_audio(file_name):
    oss_file_name = 'aiApplet/benz-poc-615/' + file_name
    access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', 'LTAIYXF7tGOgOfrX')
    access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '83Z90MMp6PgJoJgOzDvFtYnpGHNxX5')
    bucket_name = os.getenv('OSS_TEST_BUCKET', 'ai-dl')
    endpoint = os.getenv('OSS_TEST_ENDPOINT', 'http://oss-cn-hangzhou.aliyuncs.com')
    domain = 'https://ai-dl.oss-cn-hangzhou.aliyuncs.com/'

    # 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    auth = oss2.Auth(access_key_id, access_key_secret)
    # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    # 填写Bucket名称。
    bucket = oss2.Bucket(auth, endpoint, bucket_name)

    # 必须以二进制的方式打开文件。
    # 填写本地文件的完整路径。如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件。
    with open(file_name, 'rb') as fileobj:
        # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传，直到文件结束。
        fileobj.seek(1000, os.SEEK_SET)
        # Tell方法用于返回当前位置。
        current = fileobj.tell()
        # 填写Object完整路径。Object完整路径中不能包含Bucket名称。
        bucket.put_object(oss_file_name, fileobj)
    return domain + oss_file_name


new_audio_addresses = []  # 存储新音频地址的列表

# 遍历每个会话，下载并拼接音频文件
for idx, row in grouped.iterrows():
    # 下载并拼接音频文件
    audio_urls = row['用户说话地址'].split(',')
    combined_audio = None

    for url in audio_urls:
        audio = download_audio(url)
        if combined_audio is None:
            combined_audio = audio
        else:
            combined_audio += audio

    # 上传拼接后的音频文件
    session_id = row['会话id']
    file_name = f'combined_{session_id}.mp3'
    new_audio_url = upload_audio(file_name)
    new_audio_addresses.append(new_audio_url)

# 将新音频地址添加到数据框中
grouped['新的音频地址'] = new_audio_addresses

# 导出为新的Excel文件
output_excel = 'output.xlsx'
grouped.to_excel(output_excel, index=False)

print(f"处理完成，新文件已保存为 {output_excel}")
